Search Results: "jimmy"

19 November 2007

Evan Prodromou: 28 Brumaire CCXVI

I'm glad to note that there's been a lot of movement over the last few weeks for the Montreal Coworking space. Patrick Tanguay, who's been organizing the project, let me know recently that we're closing in on a space. Which is just fantastic. Coworking is a loose term for a number of different ways of working together. The term is most commonly used for a kind of shared office where participants pay for either a fixed space (their own desk) by the month, or they pay for the use of a pool of free spaces (shared desks) on a daily or part-time basis. There are the kind of office resources, like WiFi, conference rooms, printers, copiers, etc. that you expect from an office, but unlike most shared-office situations, there's also an emphasis on community and communications. It's a great kind of work environment for people who would otherwise work at home or in caf s, such as freelancers, contractors, and startuppers -- or for people visiting from out-of-town. I've been to a couple of the Bay Area (California) coworking spaces -- the one at Citizen Space in San Francisco and the one at SocialText in Palo Alto. Both were convenient, fun, and social -- a good place to get some work done. Patrick's been working on a Montreal coworking space for a while -- talking to the City and neighbourhood development organizations -- and he's settled on a space in Mile End. It looks pretty fantastic. You can see the pictures and a map at the Montreal Coworking Web site. I've been working out of the house for about 5 years, and I really like the freedom and convenience it affords. That said, I'm really looking forward to having a more formal environment to work in than my home office. It's great here, and I feel very comfortable, but it would be nice to be out of the house. I also tend to meet with contractors and partners at local caf s, which can be distracting -- I'm looking forward to having meeting rooms. There's a 5 7 ("sank ah set" -- it's what we call a cocktail party here in Montreal) planned for people who'll be involved in the site planned for this Wednesday, November 21, at Bar Inc. (250 Mont-Royal Est). I won't be there -- we'll be in New Jersey by then -- but I hope others interested in the coworking take the chance to go. tags:

JS-Kit and data portability I've been a big fan of JS-Kit since I heard about it. I featured it in my list of 10 Web APIs for LinuxWorld, and I use it on my own personal site for comments. But one thing that concerns me, and that I've asked for clarification from JS-Kit about, is data portability. If they went out of business (heaven forfend), or if I figured out another cool way to do comments on my site, I'd like to be able to migrate old comments to the new system I'd build/use/buy. But as far as I can tell, there's no interface to download all comments on a site (either in HTML or some other structured format). I think this is going to be a key issue for people building Web sites with UI widgets in the future. It's a really, really useful way to make sites, but I don't think many developers are going to be willing to invest in a platform with no "insurance" that they can be flexible in the future. Sure, it's free of charge, and it seems kind of mean to use the poor JS-Kit folks and then move on to someone else -- but realistically it's an option you need for development. tags:

One-liners Some other stuff I'm thinking about today:
  • On the "upcoming events" front, we've got some plans to make BarCampCanada1 happen here in Montreal in May 2008. I'm not sure how that's going to shake out, but I'm excited about the possibility of a nationwide BarCamp.
  • I'm interested in Heather Ford's and Jimmy Wales's 50 parties idea - having fifty parties in one year to bring together local Free Culture people. I think we should have a party here in Montreal. Maybe in the Spring...? Maybe to coincide with BarCampCanada1?
tags:

25 October 2007

Daniel Jacobowitz: An adventure in Unicode PC fonts

I have always had some trouble with my eyes. One bizarre side effect of this is that switching fonts is very unpleasant. I recently got fed up with fighting things to live in the stone age of pre-Unicode fonts and locales and started hunting for a new console font. First I looked for nice new ones already designed for Unicode, with a selection of accented characters and so forth. The nicest I found was Terminus, but I’ve had trouble adjusting to it. So eventually I decided to stick with the font I’d been using - at least for now. I have been using the same font for my consoles since before 1997. This is, or at least was, the default Linux console font back when I did all my work on a VT on Linux/PPC: /usr/share/consolefonts/default8x16.psf.gz. When I started using X routinely I missed it quite a lot. Mostly that was because I used BitchX, and BitchX is written for an IBM437 code page set of line drawing characters. So I opened up that console font in xmbdfed and converted it to a PCF file. If you have Debian’s BitchX package installed, you’ve got a copy of this work in /usr/share/fonts/X11/misc/default8x16.pcf.gz. So I’ve done the same trick again. Here’s the steps I followed: Actually, after all that I was having trouble with the font’s name and eventually getting scary resource errors from X. I opened the font in gbdfed and saved it, which added some attributes and modified the bitmaps. Then I tried again and it worked. And now, I can use a UTF-8 locale and gcc’s error messages come out with foo’ (”angled” quotes) instead of display corruption! The resulting font is uni8×16, if anyone else would like it. I have switched to using it for all my terminals other than the one I run BitchX in; BitchX still needs the IBM437 version in order to display correctly. Of course, as soon as I finished this Paul Brook informed me that Konsole includes basically the same sort of font. I do not know the origins of KDE’s console8×16, but I do know that it’s a slightly different font (the @ has a smaller center, for example). And I know that I’m mighty annoyed it didn’t get added to my font path correctly when I installed konsole ages ago, since I might otherwise have found it!

3 August 2007

Evan Prodromou: 15 Thermidor CCXV

It's been a few days since I posted on my blog -- since I left Montreal for Taipei and Wikimania 2007. My time has been upside-down and backwards as I've traveled around to the other side of the clock and a day into the future, and I've just been insanely busy with other work. My flight to Taipei was dreamy. I travelled enough last year to get Air Canada's "silver" frequent-flier level, which earned me a couple of system-wide upgrade certificates. They came in handy, since I bumped up to business class on the leg between Montreal and Vancouver, and then to the "Premier Laurel" class on the EVA Air codeshare between Vancouver and Taipei. That was first class across the Pacific Ocean, and man, it's the only way to fly. Jimmy Wales was on the same plane (but back in business class...), so we got to chat a bit and we shared a taxi to the conference site. Jimmy's really fun to talk to -- it's always nice talking to another entrepreneur who's passionately dedicated to Free and Open Content. (We were in line for customs together, too, and I tried to peek at his passport to find out his date of birth, over which there is some confusion. But he had his thumb over the day (intentionally...?), and all I got was "Aug 1966", which everyone agrees on anyways. Dang! My personal theory is that Jimmy was born on 6 June 1966 and uses 8 Aug 1966 instead to avoid the demonic stigma.) The conference centre we're in is great -- a really big, clean, modern place. It's nice when we're inside, but Taipei in August is muggy and hot like a laundromat in rural Mississippi. I find myself rushing between buildings. tags:

IM IN TAIPEI HACKING UR DAYS I came in a couple of days early to participate in the Hacking Days event. This is a pre-conference meetup for MediaWiki developers and those who love them. The meetup was really unstructured and fun because of it, although there were a few points of uncomfortable silence when people stopped talking and we all realized we had 14 more hours of meetings and not much left to say. There's also a real tension between the conference organizers, who've encouraged non-developers to come to Hacking Days, and the core developers who really want to just be left alone and get some work done. This year the 2-day event was split into "Hacking Days" and "Hacking Days Extra", with the first being invite-only and the second being open to all. I think it's a tension that needs to be resolved -- if outsiders aren't invited to Hacking Days, we just need to say that and live with it. We shouldn't let people think they're going to participate and then cut them out. That's a bait-and-switch tactic and it's unfair. I think that there's a need for an open-attendance MediaWiki conference; I also think that MW is a big enough piece of software that third-party conference organizers would be eager to make an MWCon work. And core developers could get hefty fees for coming to talk! tags:

Announcements I've been having problems sleeping here. I've been falling asleep at the wrong times and waking up at the very wrong time. Last night, I missed the Wikitravel Eat-together because I fell asleep at dinner time and didn't get up for the event. Make mental note: don't miss your favorite wiki's user get-together! Fortunately Jani covered for me and apparently the event was a lot of fun. Speaking of Jani: this morning he announced a new venture that Maj and I have been helping him with. Wikitravel Press is an independent company that will be publishing a line of printed travel guidebooks (yes, paper books! That you can hold in your hand!) based on Wikitravel content. I think it's a great project and I'm really glad we're going to finally be fulfilling this important goal of the Wikitravel project. I also think it's going to be a great way to attract a new round of contributors -- people who are more reliant on their paper guidebooks than to a search engine for learning about their destinations. I think that the idea that they can change and improve the books they have will be a really important incentive for these folks. And like it or not, there are still a lot of people who don't consider digital information "real" in the same way as analog-stored info. So putting Wikitravel guides on paper is like Pinocchio becoming a Real Boy. Thank you, Blue Fairy! More info at the project's announcement and the on-site discussion (Wikitravel:3 August 2007). tags:

Called out This morning's keynote address by the Wikimedia Foundation chairwoman Florence Devouard was informative and interesting. She even talked about ways to bring money into the Foundation... including selling books based on the site content. I was giggling about this with Jani as she moved on to talking about the attention economy, to hear, "For example, Evan is not paying attention right now and talking to his neighbour." D'oh! Lesson learned: don't mess with User:Anthere! tags:

29 July 2007

Evan Prodromou: 10 Thermidor CCXV

I'm getting myself ready to take off for Taipei for Wikimania 2007. It's going to be an exciting event -- my first time in Taiwan, too. I've been ambiguous about Wikimania each year, but I seem to keep going. The stated purpose of the conference is to be solely for Wikipedia and other Wikimedia projects, but people seem to keep coming who don't have anything to do with Wikimedia projects, so I figure I might as well go, too. I like finding out what other people are doing with MediaWiki, and I like getting pumped up about Open Content, the Wiki Way, and freedom of information around the world. I hope that eventually more general-purpose wiki conferences like RecentChangesCamp and WikiSym will get more public attention, and participation by Wikimedians, in the future. It would relieve some pressure on Wikimania to be something it doesn't seem to want to be. I'm going to be speaking about Extending wikis with social networking tools. We've done some interesting work with this on Wikitravel Extra, and I plan on using the same technique for other wiki sites in the future. I think it's a powerful way to enhance the unity of consensus knowledge with a multiplicity of varying opinions. I'm also looking forward to the Debian Birthday Party 2007, thrown by local Debianistas. It should be a lot of fun! There's also a Creative Commons conference happening during Wikimania, which will be pretty interesting. Lots to do in Taiwan this year. tags:

WYSIWYG and MediaWiki I've been an advocate of WYSIWYG editing in MediaWiki for 3 years now. So I'm interested to see that the core dev group for FCKeditor have gone the distance to make a real, working WYSIWYG plugin for MediaWiki. The extension has just about everything that I'd want from a WYSIWYG mode for MW:
  • It stores articles as Wikitext. Since in-browser editors generate HTML, plugins often try to store HTML in the wiki database, but this conflicts so much with other parts of the site, it's unworkable.
  • It's implemented as a MediaWiki extension. This makes it possible for MW installations to experiment with the tool and remove it if they don't like it. It also shows that the tool isn't too invasive and should work with other extensions.
  • It supports templates, tables, images, and citations. A lot of the advanced syntax for MediaWiki is supported.
  • It's optional for users. Users can switch to Wikitext any time they're editing a page, and users who don't like WYSIWYG at all can turn it off with a user preference toggle.
I think that this tool has the capability to be the WYSIWYG editor for MediaWiki. The previous effort using Wikiwyg didn't handle most of these points. Jimmy Wales gave an impassioned keynote at Wikimania 2006 about the need for WYSIWYG editing on Wikipedia and elsewhere, and I hope we can use the FCKeditor MediaWiki extension to meet that need. tags:

27 July 2007

John Goerzen: OSCon Friday

Fudge Update

Yesterday I blogged about the guy handing out fudge. He saw my post and explained why he was doing it. Today he was around handing out fudge, and I thanked him for his comment. He gave me two pieces of fudge for blogging about it.

Pineapple

At most of the breaks, they have this truly wonderful real (non-canned) pineapple. I think I have eaten more pineapple this week than any other week, ever. Very insidious, O'Reilly.

Conference materials

Slides of talks are available. Apparently keynotes are being posted on Youtube and Google Video, though they haven't provided a specific link AFAICT.

Philip Rosedale, Founder/CEO of Linden Lab

Second Life and the XPrize are two examples of escapism: you can escape to virtual earth, or escape the planet entirely.

In order for Second Life to grow, it has to become profoundly open. It has to be a standardized protocol. They are working on code to let people run their own servers. They are trying to make the server trusted and make it able to be open sourced as well. They see openness as the key way for it to grow.

If you are writing a web app that depends on the network effect -- such as Facebook -- you should open source everything right from the beginning. Not because it's best for humanity, but because you will win.

Jimmy Wales

He's trying to do open source search. Nice idea, could have been summarized in 45 seconds, I think.

Simon Wardli

Was going to talk about Zimki, which was going to open sourced, but they decided not to.

Funny and interesting talk, I sorta forgot to take notes while listening...

Nat Torkington

OSCon program chair.

Funny talk about Linux, an adolescent at 16 years old. Thinking about different languages and how they're doing. How the Linux community is organized: are we fighting battles, and do we need to?

James Larsson

This guy takes old hardware and makes insane devices out of it. 15,000 volts running over a coat hanger used as a "game controller", for instance.

In all, awesome keynotes today.

20 June 2007

Jaldhar Vyas: (Won't) See You At Debconf 7 Jimmy!

Once again I am missing out on all the fun. But meanwhile in an alternate
timestream... Debconf 7

22 March 2007

Isaac Clerencia: Bloodhound Gang gig, Sheffield crazyness, holidays in America

Last weekend my workmate Javi and I attended a Bloodhound Gang show in Sheffield, UK. It was quite cool and we got the chance to see Jimmy Pop and Evil Jared live. I also had the chance to see this amazingly crazy poster at Sheffield bus station. In unrelated news I’m leaving tomorrow towards the United States, I am going on holidays to New York and Boston for a couple of weeks with a group of friends, I hope it to be great :)

15 March 2007

Adam Rosi-Kessel: Are Lawyers Important on the Web?

PCWorld provides a list of the 50 most important people on the web. Topping the list, unsurprisingly, are Eric Schmidt, Larry Page, and Sergey Brin. Other usual suspects include Steve Jobs, Bram Cohen, Jimmy Wales, Bruce Schneier, and Craig Newmark. I was disappointed that there wasn’t a single practicing attorney on the entire list. The closest they got is Larry Lessig, who is admittedly a lawyer of sorts, but at least in my mind more of an academic. A couple of others appear to be former lawyers. I’d like to think we lawyers can make enough of a positive difference to be “important.” The optimistic view might be that practicing attorneys need to keep a lower profile on the sorts of issues that attract PCWorld and the like and are thus unlikely to be recognized publicly. The pessimistic view is that the technologists and business people just matter a lot more.

14 February 2007

MJ Ray: Darling cheese head SPI was yards too greasy (2)

Jimmy Kaplowitz commented:
"The text "the board to confirm SPI's view of debian" goes to a 404 not found error page. If you are referring to this post: then I certainly had no idea what correspondence you were asking the secretary to report, and he may well not have known either if he wasn't up on the latest posts to debian-vote."
I'm not referring to that post. I sent a later message to board cc:general. I got bored waiting for it to appear, so I linked to where the next message will appear. I'm surprised it hasn't appeared yet. That's probably something to do with SPI's email-hostile server config, which I asked the board to address last month and they deferred.
"Please don't attribute a lack of response to a desire to avoid questions and add red tape when it can mostly be explained by a simple lack of understanding of the question. (Yes, if Neil had acted perfectly he would have replied to your mail asking what correspondence you meant, and if you had acted perfectly you would have included a link to the correspondence in the first place. Nobody's perfect.)"
I don't know what correspondence has been received, so how can I link it? I could link one example from me, I guess, but presumably there is more.
"I also can't find the correspondence to which you refer in any of my SPI list archives, private or not. If it was a direct mail to the secretary, then maybe Neil should have replied, but Neil is no more able to speak for the board in these matters than any other individual director. We'd need to pass a resolution if you wanted an official statement to end any confusion. Personally I think that SPI would act on a GR that overrode a DPL decision in keeping with the Debian Constitution, but as I just said, neither I nor any board member who spoke up on debian-vote can rightly express an opinion of the board on this matter in the absence of a resolution. Certainly a resolution would be reasonable."
I thought Neil is no more able to speak for the board than Joey or any other director. However, when I asked Joey to show proof that SPI only views the DPL, Neil posted. Neil's SPI secretary, so should know whether some proof exists, right? Now it seems a no-op resolution is needed to sort this out, as neither Joey or Neil agreed that SPI would follow non-DPL decisions. In a word: argh.

2 February 2007

Evan Prodromou: 13 Pluvi se CCXV

I spent most of the day yesterday travelling from Montreal to Portland for RecentChangesCamp 2007. I got a pretty decent last-minute ticket with flyer miles from Aeroplan, but the flight took me through Washington (D.C.) which was probably 2-3 hours out of my way. The first leg of the flight was great -- one of those nice puddle-jumpers with leather seats and lots of legroom. I got into Dulles and had time for an impressive (for airport food) pair of crabcakes at the Tidewater bar and restaurant. I shared a table with Mary Beth from Albany (New York), who was en route to Beijing to adopt a 1-year-old baby girl. We had a pretty good talk. The second leg was brutal, though. It was three big guys in a three-seat row on a crowded 6-hour flight. (Just before they closed the doors, the guy in the aisle seat scooted over to an open seat in the adjacent row. We all laughed at dodging the bullet of having to sit on top of each other... then the family who had those seats made a last-minute rush for the plane, and aisle-guy moved back to Elbonia with us. We sat in sullen silence for the rest of the flight. Gar.) I managed to distract myself by reading The Good Earth and watching Marie Antoinette (2006 film), which was actually really good. I'd heard about the soundtrack -- New Wave -- and thought it'd be an anachronistic distraction from the period, but it turned out to fit very well. Between the two I managed to keep myself from going insane. I got a nice Mazda 6 from Hertz at the airport and after missing the 84 turn-off and driving 20 miles out of my way (and back again) I got to my hotel for the weekend. The Jupiter Hotel is a remodeled cheap-o motel on Portland's hip East Side. The rooms have been stripped of their clown paintings, fly-specked wallpaper and floral-print bedspreads, and replaced with a spare, pleasant d cor reminiscent of a smart European DJ lounge or an Ikea catalog. Free Wi-Fi, full-length chalkboards on the doors for doodlers, organic soaps and shampoo. French press for morning coffee. Branded jimmy-hat with a big J on it next to the bed. Isn't that sweet? The place reminds me a bit of boutique hotels like the Hotel Palomar in San Francisco, but it doesn't quite have the full high-end feel. After all, if you look at it through squinty eyes, the room is a cinder-block motel cell, and the nice look doesn't quite hide that. But a regular room rate starting at $79/night is hard to beat. There's an outdoor fireplace, pleasant grounds, and lots of bare hewn logs around the lot. The adjacent Doug Fir Lounge has impressively medium-name music acts and a really nice post-modern ski-lodge look. I'm a bit worried about noise tonight (the complimentary earplugs in the bedstand have be concerned), but my room is waaaay in the back of the lot, away from the lounge, so hopefully it won't be too bad. The Doug Fir also has a restaurant, and I'm sitting there right now writing this entry. I just had a very tasty smoked-salmon eggs benedict (b n dictine, for you Montrealers out there), and once I finish this sentence and my surprisingly decent decaf, I'm off for RCC07. tags:

15 January 2007

Evan Prodromou: 24 Niv se CCXV

Last minute note: I mentioned some discussions about advertisement on Wikipedia; I sadly missed a conversation in which Jason Calcanis pointed out that Wikipedia leaves $100M on the table, and the response from Jimmy Wales who has his own take on advertising and Wikipedia. Interesting discussion. tags:

13 January 2007

MJ Ray: SPI: Communications

I wrote SPI gives away opensource.org and opensource.net and Bruce Byfield wrote SPI to transfer domain names to OSI - I think it's interesting to see how differently we view the disagreement. One possible reason for the difference is that the email discussion around this resolution happened on private lists. I saw the December meeting notice a couple of days before the meeting, sent the board a request that they fix member communications and then started a discussion about giving away the opensource domains with:
"SPI still holds the opensource domains because SPI is a membership controlled organisation and OSI was a self-perpetuating board; and OSI had not done enough to balance their bad licence proliferation work. Why isn't that mentioned in the proposal? Why does 2006-11-18.dbg.mjs.1 not mention 2005-07-26.bp.1? Is it good to keep reposting rejected proposals until they pass? Why is the SPI board being asked again to surrender the domains while OSI is unreformed?"
The reason I started the discussion on spi-private was Josh Berkus writing
"If you think it's important that we should drag it onto spi-private, though, I suppose we should."
which rather suggested a private list was the appropriate venue. As Neil wrote:
"Some discussion has occured on the spi-private mailing list as to how the opensource.org resolution has been handled by the board."
That's putting it mildly. I wrote about the lack of public discussion (as mentioned in my previous report):
"I still don't see how some board members reconcile their votes to give away community assets with their promises. How the devil does board expect members to oversee it when board hides its operations from our view?"
There is a report on the discussion at the next meeting, which will hopefully put the reasons on the public record at last. Unsurprisingly, the first January 2007 meeting agenda omitted my member communications request, but board member Jimmy Kaplowitz accepted my reminder.

20 December 2006

MJ Ray: SPI gives away opensource.org and opensource.net

For various reasons, Software in the Public Interest (SPI) owned the domains opensource.org and opensource.net, which have been managed by the Open Source Initiative (OSI) for most of their life. This supported various SPI goals and also gave a possibility of community control of opensource.org/net just in case it was ever needed. OSI does not offer much opportunity for community control, as it is a self-appointing board. (Regular readers may remember that the principles of democratic member control, autonomy and concern for community are important to me.) I was watching as the SPI board voted in favour of giving away the opensource domains, proposal 2006-11-18.dbg.mjs.1 on the agenda. The vote happened without any discussion in the meeting. From memory (I guess logs will appear on the SPI site eventually):- David Graham ("SPI must also be involved in the promotion of and education about open source") proposed and voted for this action that stops SPI being involved in this promotion and education about open source; Michael Schultheiss ("I look forward to SPI's future expansion") (amended and?) voted for this action that reduces SPI; Neil McGovern ("achieve a greater degree of involvement [...] from the community in general") voted for this action that lessens SPI's involvement; Jimmy Kaplowitz ("It is important that it continue holding in trust the money and other legal assets belonging to its member projects [...] fulfill some more of its stated corporate purposes, involving education of the general public about free software and about computers in general") voted for this action that drops these assets and reduces involvement in education of the general public; Bdale Garbee ("would like to close this issue one way or another, once and for all") seemed willing to vote for anything which prevented further discussion - of course, only surrendering the domains could close it once and for all, as this is a one-way trapdoor topic - but had apologised for absence from the meeting; Martin "Joey" Schulze had apologised for absence from the meeting; Josh Berkus (nothing obviously relevant in his platform) abstained - consistent but disappointing; I think Branden Robinson was missing. Ian Jackson ("SPI's role is to provide a stable legal entity which can hold assets") voted against this action so that SPI would keep holding these assets. Bravo! Sources: The quotes above are the board's own promises in their election platforms, as listed on the SPI site in 2003 2006 apart from Bdale Garbee's platform which wasn't at the link given in 2004 so that quote is from the minutes of the previous meeting If some board members are willing to give away assets for no good reason, that strikes at one of SPI's core methods: holding assets for the community. What can we trust about this board? Their platforms are full of fine sentiments, but how do their actions reflect their platforms? This may be a mostly-dormant issue until the next election. If you want any of SPI's assets, just ask. If your request is rejected (as SPI rejected the opensource domain give-away before), just keep asking new sets of voters until they agree.

27 October 2006

Scott James Remnant: Upstart in Universe

upstart is a replacement for the init daemon, the process spawned by the kernel that is responsible for starting, supervising and stopping all other processes on the system. The existing daemon is based on the one found in UNIX System V, and is thus known as sysvinit. It separates jobs into different “run levels” and can either run a job when particular run levels are entered (e.g. /etc/init.d/rc 2) or continually during a particular run level (e.g. /sbin/getty). The /etc/init.d/rc script is also based on the System V one (and is in the sysv-rc package), it simply executes the stop then start scripts found in /etc/rcN.d (where N is the run level) in numerical order. Why change it? Running a fixed set of scripts, one after the other, in a particular order has served us reasonably well until now. However as Linux has got better and better at dealing with modern computing (arguably Linux’s removable device support is better than Windows’ now) this approach has begun to have problems. The old approach works as long as you can guarantee when in the boot sequence things are available, so you can place your init script after that point and know that it will work. Typical ordering requirements are: This worked ten years ago, why doesn’t it work now? The simple answer is that our computer has become far more flexible: We’ve been able to hack the existing system to make much of this possible, however the result is chock-full of race conditions and bugs. It was time to design a new system that can cope with all of these things without any problems. What we needed was an init system that could dynamically order the start up sequence based on the configuration and hardware found as it went along. Design of upstart upstart is an event-based init daemon; events generated by the system cause jobs to be started and running jobs to be stopped. Events can include things such as: In fact, any process on the system may send events to the init daemon over its control socket (subject to security restrictions, of course) so there is no limit. Each job has a life-cycle which is shown in the graph below: The two states shown in red (“waiting” and “running”) are rest states, normally we expect the job to remain in these states until an event comes in, at which point we need to take actual to get the job into the next state. The other states are temporary states; these allow a job to run shell script to prepare for the job itself to be run (“starting”) and clean up afterwards (“stopping”). For services that should be respawned if they terminate before an event that stops them is received, they may run shell script before the process is started again (“respawning”). Jobs leave a state because the process associated with them terminates (or gets killed) and move to the next appropriate state, following the green arrow if the job is to be started or the red arrow if it is to be stopped. When a script returns a non-zero exit status, or is killed, the job will always be stoped. When the main process terminates and the job should not be respawned, the job will also always be stopped. As already covered, events generated by the init daemon or received from other processes cause jobs to be started or stopped; also manual requests to start or stop a job may be received. The communication between the init daemon and other processes is bi-directional, so the status of jobs may be queries and even changes of state to all jobs be received. How does it differ from launchd? launchd is the replacement init system used in MacOS X developed as an “Open Source” project by Apple. For much of its life so far, the licence has actually been entirely non-free and thus it has only become recently interesting with the licence change. Much of the goal of both systems appears initially to be the same; they both start jobs based on system events, however the launchd system severly limits the events to only the following: Therefore it does not actually allow us to directly solve the problems we currently have; we couldn’t mount filesystems once the “filesystem checked” event has been recived, we couldn’t check filesystems when the block device is added and we certainly couldn’t start daemons once the complete filesystem (as described by /etc/fstab) is available and writable. The launchd model expects the job to “sit and wait” if it is unable to start, rather than provide a mechanism for the job to only be started when it doesn’t need to wait. Jobs that need /usr to be mounted would need to spin in a loop waiting for /usr to be available before continuing (or use a file in a tmpfs to indicate it’s available, and use that modification as the event). This is not especially surprising given that Apple have a high degree of control over both their hardware and the actual underlying operating system; they don’t need to deal with the wide array of different configurations that we have in the Linux world. Had the licence been sufficiently free at the point we began development of our own system, we would probably have extended launchd rather than implement our own. At the point Apple changed the licence, our own system was already more suitable for our purposes. How does it differ from initng? Initng by Jimmy Wennlund is another replacement init daemon intended to replace the sysvinit system used by Linux. It is a dependency-based system, where upstart is an event-based system. The notion of a dependency-based system is interesting to talk about at this point. Jobs declare dependencies on other jobs that need to happen before the job itself can be started. Starting the job causes its dependencies to be started first, and their dependencies, and so on. When jobs are stopped, if running jobs have no dependencies, they themselves can be stopped. It’s a neat solution to the problem of ordering a fixed boot sequence and the problem of keeping the number of running processes to a minimum needed. However this means that you need to have goals in mind when you boot the system, you need to have decided that you want gdm to be started in order for it, and its dependencies, to be started. Initng uses run levels to ensure this happens, where a run level is a list of goal jobs that should be running in that run level. It’s also not clear how the dependencies interact with the different types of job, a dependency on Apache would need the daemon to be running where a dependency on “checkroot” would need the script to have finished running. Upstart handles this by using different events (“apache running” vs. “checkroot stopping”). Again while interesting, Initng does not solve the problems that we wanted to solve. It can reorder a fixed set of jobs, but cannot dynamically determine the set of jobs needed for that particular boot. A typical example would be that if the only dependency on the job that configures networking is the mount network filesystems job, then should that job fail or notbe a goal (e.g. because there are no network filesystems to be mounted) the result is that network devices themselves will not be configured. You could make everything a goal, and just use the dependencies to determine the order, however this is less efficient than just ordering the existing sysv-rc scripts (which can be done at install time). Another example is that often you simply don’t know whether something is a dependency or not without reading other configuration, for example the mount network filesystems may be a dependency of everything under /usr or may just be a dependency of anything allowing the user to login if it just mounts /home. The difference in model can be summed up as “initng starts with a list of goals and works out how to get there, upstart starts with nothing and finds out where it gets to.” How does it differ from Solaris SMF? SMF is another approach to replacing init developed by Sun for the Solaris operating system. Like initng it’s a dependency-based system, so see above for the differences between those systems and upstart. SMF’s main focus is serive management; making sure that once services are running, they stay running, and allowing the system administrator to query and modify the states of jobs on the system. Upstart provides the same set of functionality in this regard, services are respawned when they fail and system administrators can at any time query the state of running services and adjust the state to their liking. Will it replace cron, inetd, etc? The goal of upstart is to replace those daemons, so that there is only one place (/etc/event.d) where system administrators need to configure when and how jobs should be run. In fact, the goal is that upstart should also replace the “run event scripts” functionality of any daemon on the system. Daemons such as acpid, apmd and Network Manager would send events to init instead of running scripts themselves with their own perculiar configuration and semantics. A system administrator who only wanted a particular daemon to be run while the computer was on AC power would simply need to edit /etc/event.d/daemon and change “on startup” to “on ac power”. What about compatibility? There’s a lot of systems administrators out there who have learned how Linux works already and will not want to learn again immediately, there’s also a large number of books that cover the existing software and won’t cover upstart for at least a couple of years. For this reason, compatibility is very important. upstart will continue to run the existing scripts for the forseeable future so that packages will not need to be updated until the author wants. Compatibility command-line tools that behave like their existing equivalents will also be implemented, a system administrator would never need to know that crontab -e is actually changing upstart jobs. Does it use D-BUS?
“To D-BUS people, every problem seems like a D-BUS problem.” —Erik Troan
The UNIX philosophy is that something should do just one job, and do it very well. upstart’s one job is starting, supervising and stopping other jobs; D-BUS’s one job is passing messages between other jobs. D-BUS does provide a mechanism for services to be activated when the first message is sent to them, thereby starting other jobs. Some people have taken this idea and extended it to suggest that all a replacement init system need do is register jobs with D-BUS and turn booting into a simple matter of message parsing. This seems wrong to me, D-BUS would need to be extended to supervise these services, provide means for them to be restarted and stopped; as well as deal with being process #1 which means cleaning up after children whose parent’s have died, etc. It seems far simpler to arrange for D-BUS to send an event to init when it needs a service to be started, and focus on being a very good message passing system. The IPC mechanism used by upstart is not currently D-BUS because of various problems, however it’s always been expected that even if init itself doesn’t communicate with D-BUS directly, there would be a D-BUS proxy that would ensure messages about all init jobs and events would be given to D-BUS and D-BUS clients could send messages to init to query and change the state of jobs. What is the implementation plan? Because this is process #1 we are changing, we want to make sure that we get it right. Therefore instead of releasing a fully-featured daemon and configuration to the world, we’re developing it in the following stages:
  1. Principal development; at the end of this stage the daemon has been implemented and can manage jobs as described.
  2. Replacement of /sbin/init while running the existing sysv-rc scripts. This is the shake-down test of the daemon, can it perform the same job as the existing sysvinit daemon without any regressions?
  3. /etc/rcS.d scripts replaced by upstart jobs. These consitute the majority of tasks for booting the system into at least single-user mode, and contain many of the current ordering problems and race conditions. If the daemon solves the problems here, it will be a success.
  4. Other daemon’s scripts replaced by upstart jobs on a package-by-package basis; this will be an ongoing effort during which upstart will continue running the existing sysv-rc scripts as well as its own jobs. During this time the event system may be tweaked to ensure it truly solves the problems we need.
  5. Replcement of cron, atd, anacron and inetd. This will happen alongside the above and result in a single place to configure system jobs.
  6. Modification of other daemons and processes to send events to init instead of trying to run things themselves.
The current plan is that we will be at least part of the way into stage #3 by the time edgy is released, with that release shipping with upstart as the init daemon and the most critical rcS scripts being run by it to correct the major problems For edgy+1 we hope to have completed stage #5 and be at least part of the way into the implementation of stage #6. From the start of development of edgy+2, no new packages will be accepted unless they provide upstart jobs instead of init scripts and init scripts will be considered deprecated. What state is it in now? The init daemon has been written and is able to manage jobs as described above, receiving events on the control socket to start and stop them. This has now been uploaded to the Ubuntu universe component in the upstart package for testing before it becomes the init daemon. We welcome any experienced users who want to help test this; install the package and follow the instructions in /usr/share/doc/upstart/README.Debian to add a boot option that will use upstart instead of init. If your system boots and shut downs normally (other than a slightly more verbose boot without usplash running) then it is working correctly. Other types of events will be added as required during development and testing. Currently only a basic client tool (initctl) has been written, compatibility tools such as shutdown will be written over the next week or two before it replaces our sysvinit package.

25 September 2006

Evan Prodromou: 2 Vend miaire CCXV

Happy new year, everyone! I was away over the weekend, working hard on Ignition 2006, and I missed the big day here in front of the computer. Instead I was out under the stars with Montreal Burners, having Burning Man fun out in the wt:Eastern Townships. I'm not sure if it happened this year, but I think next year it would be great to have a Debian:BSP in wt:Black Rock City. OK, sure, it'd be super-nerdy, and the connectivity is pretty spotty, but there are some long, hot afternoons out there and I know that there are at least two DDs that are on the Playa pretty regularly (me and Don Armstrong). I wonder if there are more? I wonder if we had a BSP, if lots more would show up? tags:

Usability So, my current computer usability problem has to do with the rockin' secure shell program OpenSSH. Here's what happens: I'm on a box and I have a new login goin' on. And I have to ssh to another box, and I get the message:
Enter passphrase for /home/evan/.ssh/id_rsa: 
This happens because I haven't run ssh-add when I logged in, to store the passphrase for the key with the current ssh-agent. So now I have two options:
  1. enter my password and then possibly forget to run ssh-add before running ssh again
  2. kill the current ssh instance, run ssh-add, then run ssh again
Both options suck. What would be nice is if I could enter my passphrase, and have that count as if I had run ssh-add. Like, after I enter it, the ssh client could say:
Add this key to your current ssh-agent session [Y/n]?
...and then ssh would add the key, like ssh-add does, and continue with the login. Wouldn't that be great? I think this is the biggest usability problem I run up against in my daily work life. Which, y'know, is pretty good. [You might want to look into libpam-ssh] [See also http://advogato.org/person/mbrubeck/diary.html?start=90 ] tags:

Wikimania 2007 in Taipei I have to say that I'm a little wistful that wt:Alexandria wasn't chosen for Wikimania 2007. We had a really good bid to hold the event in Alexandria at the Bibliotheca Alexandrina, the "new" Library of Alexandria. I was getting pretty excited about going to the Mediterranean next year. But I think that Taipei is going to be a fantastic place to hold Wikimania, too. Holding the event in wt:East Asia will make it much easier for people there , in wt:Southeast Asia, and in wt:Australia or wt:New Zealand to come to the event. A Wikimania in East Asia will focus attention on the non-English-language and non-European efforts of the Wikimedia Foundation. Taiwan also has a really strong local Wikimedian group, with Wikimedia Taiwan soon on its way. Finally, a Wikimania in wt:Taiwan will re-emphasize the wp:Blocking of Wikipedia in mainland China. Jimmy Wales has said on the record that Wikimedia will not censor its Chinese-language projects to comply with the PRC's firewall (the so-called wp:Great Firewall of China), and I'm sure an official event in the ROC will further highlight that point. Personally, I'm looking forward to a trip to Taipei, which will be a good excuse for some more exploration of Taiwan. And I want to congratulate the Taipei bid team. I was impressed by the amount of work that went into the Alexandria bid, and I'm sure they did a lot of work for Taipei, too. I know the Alexandria crew is optimistic for next year: starting the steps for making a Wikimedia local chapter in Egypt, and continuing to develop relationships with the local technology companies as sponsors. Should be interesting... it might be worth a trip after all! tags:

22 September 2006

Scott James Remnant: Upstart in Universe

upstart is a replacement for the init daemon, the process spawned by the kernel that is responsible for starting, supervising and stopping all other processes on the system. The existing daemon is based on the one found in UNIX System V, and is thus known as sysvinit. It separates jobs into different “run levels” and can either run a job when particular run levels are entered (e.g. /etc/init.d/rc 2) or continually during a particular run level (e.g. /sbin/getty). The /etc/init.d/rc script is also based on the System V one (and is in the sysv-rc package), it simply executes the stop then start scripts found in /etc/rcN.d (where N is the run level) in numerical order. Why change it? Running a fixed set of scripts, one after the other, in a particular order has served us reasonably well until now. However as Linux has got better and better at dealing with modern computing (arguably Linux’s removable device support is better than Windows’ now) this approach has begun to have problems. The old approach works as long as you can guarantee when in the boot sequence things are available, so you can place your init script after that point and know that it will work. Typical ordering requirements are: This worked ten years ago, why doesn’t it work now? The simple answer is that our computer has become far more flexible: We’ve been able to hack the existing system to make much of this possible, however the result is chock-full of race conditions and bugs. It was time to design a new system that can cope with all of these things without any problems. What we needed was an init system that could dynamically order the start up sequence based on the configuration and hardware found as it went along. Design of upstart upstart is an event-based init daemon; events generated by the system cause jobs to be started and running jobs to be stopped. Events can include things such as: In fact, any process on the system may send events to the init daemon over its control socket (subject to security restrictions, of course) so there is no limit. Each job has a life-cycle which is shown in the graph below: The two states shown in red (“waiting” and “running”) are rest states, normally we expect the job to remain in these states until an event comes in, at which point we need to take actual to get the job into the next state. The other states are temporary states; these allow a job to run shell script to prepare for the job itself to be run (“starting”) and clean up afterwards (“stopping”). For services that should be respawned if they terminate before an event that stops them is received, they may run shell script before the process is started again (“respawning”). Jobs leave a state because the process associated with them terminates (or gets killed) and move to the next appropriate state, following the green arrow if the job is to be started or the red arrow if it is to be stopped. When a script returns a non-zero exit status, or is killed, the job will always be stoped. When the main process terminates and the job should not be respawned, the job will also always be stopped. As already covered, events generated by the init daemon or received from other processes cause jobs to be started or stopped; also manual requests to start or stop a job may be received. The communication between the init daemon and other processes is bi-directional, so the status of jobs may be queries and even changes of state to all jobs be received. How does it differ from launchd? launchd is the replacement init system used in MacOS X developed as an “Open Source” project by Apple. For much of its life so far, the licence has actually been entirely non-free and thus it has only become recently interesting with the licence change. Much of the goal of both systems appears initially to be the same; they both start jobs based on system events, however the launchd system severly limits the events to only the following: Therefore it does not actually allow us to directly solve the problems we currently have; we couldn’t mount filesystems once the “filesystem checked” event has been recived, we couldn’t check filesystems when the block device is added and we certainly couldn’t start daemons once the complete filesystem (as described by /etc/fstab) is available and writable. The launchd model expects the job to “sit and wait” if it is unable to start, rather than provide a mechanism for the job to only be started when it doesn’t need to wait. Jobs that need /usr to be mounted would need to spin in a loop waiting for /usr to be available before continuing (or use a file in a tmpfs to indicate it’s available, and use that modification as the event). This is not especially surprising given that Apple have a high degree of control over both their hardware and the actual underlying operating system; they don’t need to deal with the wide array of different configurations that we have in the Linux world. Had the licence been sufficiently free at the point we began development of our own system, we would probably have extended launchd rather than implement our own. At the point Apple changed the licence, our own system was already more suitable for our purposes. How does it differ from initng? Initng by Jimmy Wennlund is another replacement init daemon intended to replace the sysvinit system used by Linux. It is a dependency-based system, where upstart is an event-based system. The notion of a dependency-based system is interesting to talk about at this point. Jobs declare dependencies on other jobs that need to happen before the job itself can be started. Starting the job causes its dependencies to be started first, and their dependencies, and so on. When jobs are stopped, if running jobs have no dependencies, they themselves can be stopped. It’s a neat solution to the problem of ordering a fixed boot sequence and the problem of keeping the number of running processes to a minimum needed. However this means that you need to have goals in mind when you boot the system, you need to have decided that you want gdm to be started in order for it, and its dependencies, to be started. Initng uses run levels to ensure this happens, where a run level is a list of goal jobs that should be running in that run level. It’s also not clear how the dependencies interact with the different types of job, a dependency on Apache would need the daemon to be running where a dependency on “checkroot” would need the script to have finished running. Upstart handles this by using different events (“apache running” vs. “checkroot stopping”). Again while interesting, Initng does not solve the problems that we wanted to solve. It can reorder a fixed set of jobs, but cannot dynamically determine the set of jobs needed for that particular boot. A typical example would be that if the only dependency on the job that configures networking is the mount network filesystems job, then should that job fail or notbe a goal (e.g. because there are no network filesystems to be mounted) the result is that network devices themselves will not be configured. You could make everything a goal, and just use the dependencies to determine the order, however this is less efficient than just ordering the existing sysv-rc scripts (which can be done at install time). Another example is that often you simply don’t know whether something is a dependency or not without reading other configuration, for example the mount network filesystems may be a dependency of everything under /usr or may just be a dependency of anything allowing the user to login if it just mounts /home. The difference in model can be summed up as “initng starts with a list of goals and works out how to get there, upstart starts with nothing and finds out where it gets to.” How does it differ from Solaris SMF? SMF is another approach to replacing init developed by Sun for the Solaris operating system. Like initng it’s a dependency-based system, so see above for the differences between those systems and upstart. SMF’s main focus is serive management; making sure that once services are running, they stay running, and allowing the system administrator to query and modify the states of jobs on the system. Upstart provides the same set of functionality in this regard, services are respawned when they fail and system administrators can at any time query the state of running services and adjust the state to their liking. Will it replace cron, inetd, etc? The goal of upstart is to replace those daemons, so that there is only one place (/etc/event.d) where system administrators need to configure when and how jobs should be run. In fact, the goal is that upstart should also replace the “run event scripts” functionality of any daemon on the system. Daemons such as acpid, apmd and Network Manager would send events to init instead of running scripts themselves with their own perculiar configuration and semantics. A system administrator who only wanted a particular daemon to be run while the computer was on AC power would simply need to edit /etc/event.d/daemon and change “on startup” to “on ac power”. What about compatibility? There’s a lot of systems administrators out there who have learned how Linux works already and will not want to learn again immediately, there’s also a large number of books that cover the existing software and won’t cover upstart for at least a couple of years. For this reason, compatibility is very important. upstart will continue to run the existing scripts for the forseeable future so that packages will not need to be updated until the author wants. Compatibility command-line tools that behave like their existing equivalents will also be implemented, a system administrator would never need to know that crontab -e is actually changing upstart jobs. Does it use D-BUS?
“To D-BUS people, every problem seems like a D-BUS problem.” —Erik Troan
The UNIX philosophy is that something should do just one job, and do it very well. upstart’s one job is starting, supervising and stopping other jobs; D-BUS’s one job is passing messages between other jobs. D-BUS does provide a mechanism for services to be activated when the first message is sent to them, thereby starting other jobs. Some people have taken this idea and extended it to suggest that all a replacement init system need do is register jobs with D-BUS and turn booting into a simple matter of message parsing. This seems wrong to me, D-BUS would need to be extended to supervise these services, provide means for them to be restarted and stopped; as well as deal with being process #1 which means cleaning up after children whose parent’s have died, etc. It seems far simpler to arrange for D-BUS to send an event to init when it needs a service to be started, and focus on being a very good message passing system. The IPC mechanism used by upstart is not currently D-BUS because of various problems, however it’s always been expected that even if init itself doesn’t communicate with D-BUS directly, there would be a D-BUS proxy that would ensure messages about all init jobs and events would be given to D-BUS and D-BUS clients could send messages to init to query and change the state of jobs. What is the implementation plan? Because this is process #1 we are changing, we want to make sure that we get it right. Therefore instead of releasing a fully-featured daemon and configuration to the world, we’re developing it in the following stages:
  1. Principal development; at the end of this stage the daemon has been implemented and can manage jobs as described.
  2. Replacement of /sbin/init while running the existing sysv-rc scripts. This is the shake-down test of the daemon, can it perform the same job as the existing sysvinit daemon without any regressions?
  3. /etc/rcS.d scripts replaced by upstart jobs. These consitute the majority of tasks for booting the system into at least single-user mode, and contain many of the current ordering problems and race conditions. If the daemon solves the problems here, it will be a success.
  4. Other daemon’s scripts replaced by upstart jobs on a package-by-package basis; this will be an ongoing effort during which upstart will continue running the existing sysv-rc scripts as well as its own jobs. During this time the event system may be tweaked to ensure it truly solves the problems we need.
  5. Replcement of cron, atd, anacron and inetd. This will happen alongside the above and result in a single place to configure system jobs.
  6. Modification of other daemons and processes to send events to init instead of trying to run things themselves.
The current plan is that we will be at least part of the way into stage #3 by the time edgy is released, with that release shipping with upstart as the init daemon and the most critical rcS scripts being run by it to correct the major problems For edgy+1 we hope to have completed stage #5 and be at least part of the way into the implementation of stage #6. From the start of development of edgy+2, no new packages will be accepted unless they provide upstart jobs instead of init scripts and init scripts will be considered deprecated. What state is it in now? The init daemon has been written and is able to manage jobs as described above, receiving events on the control socket to start and stop them. This has now been uploaded to the Ubuntu universe component in the upstart package for testing before it becomes the init daemon. We welcome any experienced users who want to help test this; install the package and follow the instructions in /usr/share/doc/upstart/README.Debian to add a boot option that will use upstart instead of init. If your system boots and shut downs normally (other than a slightly more verbose boot without usplash running) then it is working correctly. Other types of events will be added as required during development and testing. Currently only a basic client tool (initctl) has been written, compatibility tools such as shutdown will be written over the next week or two before it replaces our sysvinit package.

12 September 2006

Evan Prodromou: 26 Fructidor CCXIV

I'm psyched that the 2007 Wikimania bids are in, and that wt:Alexandria is one of the cities that's got an official bid. I had a great time at Wikimania 2006, the 2nd Annual Wikimedia Conference, in wt:Cambridge (Massachusetts) this year, and I think it'll be great to go somewhere new next year. I actually proposed the Alexandria bid based on some discussions on the #wikimania freenode channel. People were talking about Jimmy Wales's announcement of a renewed commitment on the part of the Wikimedia Foundation for providing reference and learning materials in Africa and Asia. It was suggested that maybe having Wikimania 2007 in Africa, we could further highlight this commitment. In thinking of sites in Africa that might be appropriate, I remembered Brewster Kahle's talk about universal access to knowledge. He talked quite a bit about the Biblioteca Alexandrina, the "new Library of Alexandria", created to be a 21st-century center of knowledge for the entire world. What better place to have a Wikimedia conference? A multilingual, user-driven Internet of the 21st century is going to depend heavily on participation from formerly marginal groups. Reaching out to the Middle East, to Africa, and to Asia is going to be crucial for the success of the Internet, of Open Content, and of Wikimedia for the coming decade. Taking the Open Source and Open Content story outside the traditional box of Internet culture -- North America, Western Europe, East Asia, Australia -- is a big step, but I think it needs to be taken. A Wikimania 2007 in Alexandria would literally shift the centre of gravity for Wikimedia. I put together a sketchy bid on the Wikimedia meta wiki site, and then I solicited some input from Egyptian Wikipedians. The result was spectacular; people have been coming out of the woodwork to add information, contact local authorities, and negotiate with the Bib. Alex. conference centre. Now that the BA has offered to host the event gratis, I think that the Wikimania 2007 bid for Alexandria is one of the strongest of the Wikimania 2007 bids. The shortlist comes out in a few days; I hope that Alex is on it. tags:

Esperanto Wikitravel Under pressure from Chuck SMITH, the founder of Esperanto Wikipedia, I've tried to revive the wt:Wikitravel:Esperanto Wikitravel Expedition. It's been fun; I haven't done a lot of Esperanto in a while, since my new love in the conlang world is Sona. But the chances of having a Sona Wikitravel version any time soon are slim. tags:

26 August 2006

Scott James Remnant: Upstart in Universe

upstart is a replacement for the init daemon, the process spawned by the kernel that is responsible for starting, supervising and stopping all other processes on the system. The existing daemon is based on the one found in UNIX System V, and is thus known as sysvinit. It separates jobs into different “run levels” and can either run a job when particular run levels are entered (e.g. /etc/init.d/rc 2) or continually during a particular run level (e.g. /sbin/getty). The /etc/init.d/rc script is also based on the System V one (and is in the sysv-rc package), it simply executes the stop then start scripts found in /etc/rcN.d (where N is the run level) in numerical order. Why change it? Running a fixed set of scripts, one after the other, in a particular order has served us reasonably well until now. However as Linux has got better and better at dealing with modern computing (arguably Linux’s removable device support is better than Windows’ now) this approach has begun to have problems. The old approach works as long as you can guarantee when in the boot sequence things are available, so you can place your init script after that point and know that it will work. Typical ordering requirements are: This worked ten years ago, why doesn’t it work now? The simple answer is that our computer has become far more flexible: We’ve been able to hack the existing system to make much of this possible, however the result is chock-full of race conditions and bugs. It was time to design a new system that can cope with all of these things without any problems. What we needed was an init system that could dynamically order the start up sequence based on the configuration and hardware found as it went along. Design of upstart upstart is an event-based init daemon; events generated by the system cause jobs to be started and running jobs to be stopped. Events can include things such as: In fact, any process on the system may send events to the init daemon over its control socket (subject to security restrictions, of course) so there is no limit. Each job has a life-cycle which is shown in the graph below: The two states shown in red (“waiting” and “running”) are rest states, normally we expect the job to remain in these states until an event comes in, at which point we need to take actual to get the job into the next state. The other states are temporary states; these allow a job to run shell script to prepare for the job itself to be run (“starting”) and clean up afterwards (“stopping”). For services that should be respawned if they terminate before an event that stops them is received, they may run shell script before the process is started again (“respawning”). Jobs leave a state because the process associated with them terminates (or gets killed) and move to the next appropriate state, following the green arrow if the job is to be started or the red arrow if it is to be stopped. When a script returns a non-zero exit status, or is killed, the job will always be stoped. When the main process terminates and the job should not be respawned, the job will also always be stopped. As already covered, events generated by the init daemon or received from other processes cause jobs to be started or stopped; also manual requests to start or stop a job may be received. The communication between the init daemon and other processes is bi-directional, so the status of jobs may be queries and even changes of state to all jobs be received. How does it differ from launchd? launchd is the replacement init system used in MacOS X developed as an “Open Source” project by Apple. For much of its life so far, the licence has actually been entirely non-free and thus it has only become recently interesting with the licence change. Much of the goal of both systems appears initially to be the same; they both start jobs based on system events, however the launchd system severly limits the events to only the following: Therefore it does not actually allow us to directly solve the problems we currently have; we couldn’t mount filesystems once the “filesystem checked” event has been recived, we couldn’t check filesystems when the block device is added and we certainly couldn’t start daemons once the complete filesystem (as described by /etc/fstab) is available and writable. The launchd model expects the job to “sit and wait” if it is unable to start, rather than provide a mechanism for the job to only be started when it doesn’t need to wait. Jobs that need /usr to be mounted would need to spin in a loop waiting for /usr to be available before continuing (or use a file in a tmpfs to indicate it’s available, and use that modification as the event). This is not especially surprising given that Apple have a high degree of control over both their hardware and the actual underlying operating system; they don’t need to deal with the wide array of different configurations that we have in the Linux world. Had the licence been sufficiently free at the point we began development of our own system, we would probably have extended launchd rather than implement our own. At the point Apple changed the licence, our own system was already more suitable for our purposes. How does it differ from initng? Initng by Jimmy Wennlund is another replacement init daemon intended to replace the sysvinit system used by Linux. It is a dependency-based system, where upstart is an event-based system. The notion of a dependency-based system is interesting to talk about at this point. Jobs declare dependencies on other jobs that need to happen before the job itself can be started. Starting the job causes its dependencies to be started first, and their dependencies, and so on. When jobs are stopped, if running jobs have no dependencies, they themselves can be stopped. It’s a neat solution to the problem of ordering a fixed boot sequence and the problem of keeping the number of running processes to a minimum needed. However this means that you need to have goals in mind when you boot the system, you need to have decided that you want gdm to be started in order for it, and its dependencies, to be started. Initng uses run levels to ensure this happens, where a run level is a list of goal jobs that should be running in that run level. It’s also not clear how the dependencies interact with the different types of job, a dependency on Apache would need the daemon to be running where a dependency on “checkroot” would need the script to have finished running. Upstart handles this by using different events (“apache running” vs. “checkroot stopping”). Again while interesting, Initng does not solve the problems that we wanted to solve. It can reorder a fixed set of jobs, but cannot dynamically determine the set of jobs needed for that particular boot. A typical example would be that if the only dependency on the job that configures networking is the mount network filesystems job, then should that job fail or notbe a goal (e.g. because there are no network filesystems to be mounted) the result is that network devices themselves will not be configured. You could make everything a goal, and just use the dependencies to determine the order, however this is less efficient than just ordering the existing sysv-rc scripts (which
can be done at install time). Another example is that often you simply don’t know whether something is a dependency or not without reading other configuration, for example the mount network filesystems may be a dependency of everything under /usr or may just be a dependency of anything allowing the user to login if it just mounts /home. The difference in model can be summed up as “initng starts with a list of goals and works out how to get there, upstart starts with nothing and finds out where it gets to.” How does it differ from Solaris SMF? SMF is another approach to replacing init developed by Sun for the Solaris operating system. Like initng it’s a dependency-based system, so see above for the differences between those systems and upstart. SMF’s main focus is serive management; making sure that once services are running, they stay running, and allowing the system administrator to query and modify the states of jobs on the system. Upstart provides the same set of functionality in this regard, services are respawned when they fail and system administrators can at any time query the state of running services and adjust the state to their liking. Will it replace cron, inetd, etc? The goal of upstart is to replace those daemons, so that there is only one place (/etc/event.d) where system administrators need to configure when and how jobs should be run. In fact, the goal is that upstart should also replace the “run event scripts” functionality of any daemon on the system. Daemons such as acpid, apmd and Network Manager would send events to init instead of running scripts themselves with their own perculiar configuration and semantics. A system administrator who only wanted a particular daemon to be run while the computer was on AC power would simply need to edit /etc/event.d/daemon and change “on startup” to “on ac power”. What about compatibility? There’s a lot of systems administrators out there who have learned how Linux works already and will not want to learn again immediately, there’s also a large number of books that cover the existing software and won’t cover upstart for at least a couple of years. For this reason, compatibility is very important. upstart will continue to run the existing scripts for the forseeable future so that packages will not need to be updated until the author wants. Compatibility command-line tools that behave like their existing equivalents will also be implemented, a system administrator would never need to know that crontab -e is actually changing upstart jobs. Does it use D-BUS?
“To D-BUS people, every problem seems like a D-BUS problem.”
—Erik Troan
The UNIX philosophy is that something should do just one job, and do it very well. upstart’s one job is starting, supervising and stopping other jobs; D-BUS’s one job is passing messages between other jobs. D-BUS does provide a mechanism for services to be activated when the first message is sent to them, thereby starting other jobs. Some people have taken this idea and extended it to suggest that all a replacement init system need do is register jobs with D-BUS and turn booting into a simple matter of message parsing. This seems wrong to me, D-BUS would need to be extended to supervise these services, provide means for them to be restarted and stopped; as well as deal with being process #1 which means cleaning up after children whose parent’s have died, etc. It seems far simpler to arrange for D-BUS to send an event to init when it needs a service to be started, and focus on being a very good message passing system. The IPC mechanism used by upstart is not currently D-BUS because of various problems, however it’s always been expected that even if init itself doesn’t communicate with D-BUS directly, there would be a D-BUS proxy that would ensure messages about all init jobs and events would be given to D-BUS and D-BUS clients could send messages to init to query and change the state of jobs. What is the implementation plan? Because this is process #1 we are changing, we want to make sure that we get it right. Therefore instead of releasing a fully-featured daemon and configuration to the world, we’re developing it in the following stages:
  1. Principal development; at the end of this stage the daemon has been implemented and can manage jobs as described.
  2. Replacement of /sbin/init while running the existing sysv-rc scripts. This is the shake-down test of the daemon, can it perform the same job as the existing sysvinit daemon without any regressions?
  3. /etc/rcS.d scripts replaced by upstart jobs. These consitute the majority of tasks for booting the system into at least single-user mode, and contain many of the current ordering problems and race conditions. If the daemon solves the problems here, it will be a success.
  4. Other daemon’s scripts replaced by upstart jobs on a package-by-package basis; this will be an ongoing effort during which upstart will continue running the existing sysv-rc scripts as well as its own jobs. During this time the event system may be tweaked to ensure it truly solves the problems we need.
  5. Replcement of cron, atd, anacron and inetd. This will happen alongside the above and result in a single place to configure system jobs.
  6. Modification of other daemons and processes to send events to init instead of trying to run things themselves.
The current plan is that we will be at least part of the way into stage #3 by the time edgy is released, with that release shipping with upstart as the init daemon and the most critical rcS scripts being run by it to correct the major problems For edgy+1 we hope to have completed stage #5 and be at least part of the way into the implementation of stage #6. From the start of development of edgy+2, no new packages will be accepted unless they provide upstart jobs instead of init scripts and init scripts will be considered deprecated. What state is it in now? The init daemon has been written and is able to manage jobs as described above, receiving events on the control socket to start and stop them. This has now been uploaded to the Ubuntu universe component in the upstart package for testing before it becomes the init daemon. We welcome any experienced users who want to help test this; install the package and follow the instructions in /usr/share/doc/upstart/README.Debian to add a boot option that will use upstart instead of init. If your system boots and shut downs normally (other than a slightly more verbose boot without usplash running) then it is working correctly. Other types of events will be added as required during development and testing. Currently only a basic client tool (initctl) has been written, compatibility tools such as shutdown will be written over the next week or two before it replaces our sysvinit package.

9 August 2006

Evan Prodromou: 22 Thermidor CCXIV

I was sad to see that Wikia, wp:Jimmy Wales's commercial wiki hosting service, recently launched a wiki travel guide. As a founder of Wikitravel, which recently partnered with rival Open Content wiki travel guide World66, I don't like seeing needless duplication of effort. Wikia has been a great member of the Free Culture community, and I hope they'll take the needs of Open Content as a whole, as well as their business requirements, into account. I wrote an Open letter to Wikia about the matter. tags:

5 August 2006

Evan Prodromou: 18 Thermidor CCXIV

The first day of Wikimania 2006 yesterday was fantastic. Jimmy Wales opened up with a great discussion of the achievements of Wikimedia in the last 12 months -- as well as the tough issues like the John Siegenthaler, Sr. problems last winter. I also caught Mako's discussion of his and Erik M ller's new Free Content Definition effort. Mako and Erik are both extremely smart, extremely passionate people and I think they've made a big step in getting this definition off the ground. It was great to hear Ward talk about his experience with the PPR and with Wikipedia. Lawrence Lessig's discussion of Free Culture was, as I've heard before, totally awe-inspiring. We chatted a bit after the talk, and he promised to add some info to Wikitravel's wt:Costa Rica page. tags:

All you do to me is talk talk So, I finally got around to giving my presentation on Wiki and Open Content travel guides: past, present and future yesterday. It was kind of nerve-wracking (good to know that Dave Weinberger was having problem with his speech, too, though), and I was revising slides up until a few hours before the talk. Jack Herrick of [[$$vote for http://www.wikihow.com/ and I kept planning to sit down together and go over our slides, but we kept missing each other... or, we'd have time, and neither one of us felt ready to show the other how far we'd gotten. I saw Jack about 5 minutes before our talk, and asked how he felt, and he said, "I've only got a few more slides to finish..." His talk was great. The work he's done on wikiHow over the last few years -- expanding the idea of eHow into the wiki environment -- is awe-inspiring. The community there is great. I also liked that he talked about some of the mistakes he made with wikiHow -- kind of a brave thing to do. My talk went pretty OK, I think. The group that was watching was really receptive to the ideas of wiki and Open Content, so I could really concentrate on the importance of applying the ideas to travel guides. I had that great feeling of conveying my ideas and having them understood -- always a fine thing for a speaker. Chris Bronk from the State Department finished up with a discussion on Diplopedia, which I thought was pretty neat, too. It's an internal project of the State Dept to apply wiki-based knowledge management to the diplomatic corps. It's just launching and I hope it works out. The Q&A session went well -- one woman in particular grilled me about ideas on how to build personal opinion, reviews and ratings into the objective wiki platform. When I left the room at the end, one of her colleagues caught up with me. "I'm from the arch-enemy," he said, and pulled out his card from TripAdvisor. They started a wiki recently, although it's not Open Content, and they're here at Wikimania, too. tags:

Par-tay We also had our wt:Wikitravel:10K Party last night at Tommy Doyle's Irish Pub right off of Harvard Square. The food was good, and the beers were excellent, and all the bartenders had Irish accents, which made the whole experience worthwhile. It was great to have both Wikitravellers (those few of us who are at Wikimania) and non-WTers at the party. Amita June loved the venue because it was below street-level, and she could walk up the stairs and down the stairs (holding Mama or Papa's hands), up and down, up and down... She also enjoyed the pub food (quesadillas, stuffed mushrooms, potato skins, etc.) a little more than is probably healthy for a 1-year-old. I got to hang out with a lot of wiki people who are doing interesting things. Paul Youlton at Yellowikis.org was fun to talk to -- the business listings he's doing are fascinating. His site just got served notice by Yell, owner of the "Yellow Pages" trademark in the UK, for "passing off" as a Yellow Pages site. "Passing off" is a weaker charge than "trademark infringement", but it has the advantage for Yell that it doesn't put their trademark in jeopardy. (The "Yellow Pages" trademark in the US passed into the public domain at the breakup of AT&T.) The part was a good time, but it made me miss a lot of the great people who work on Wikitravel. I'd like to make a plan for a Wikitravel Getaway -- just a group trip to some cool part of the world with as many other Wikitravellers as can make it. It could be a lot of fun tags:

Wikimania bloggers One cool thing about being at Wikimania is that I'm finding all of the really active Wikimedia-related bloggers out there. Andrew Lih, better known as "Fuzheado", keeps a good blog on wiki and Wikipedia-related items. Angela Beesley, Wikimedia Foundation board member and exec at Wikia, also has a good blog about wiki-related items. tags:

Busted! Dan Bricklin came up today and thanked me for my blog entry about meeting him (see Journal/15 Thermidor CCXIV. D'oh! Totally busted. But we had a lot of good talk about spreadsheets as a form of presentation, the parsability of MediaWiki wikitext, and SocialText's great work with the rest of the wiki community. Nice person with a lot of interesting things to say... I need to stop being intimidated by software and Internet superstars, I guess. tags:

Next.

Previous.